1
Konkurensi di Planet Merah
AI017Lesson 8
00:00

Konkurensi di Planet Merah adalah seni mengelola beberapa operasi independen—seperti navigasi rover, telemetri tanda kehidupan, dan koneksi satelit—tanpa sistem terhenti. Dalam Go, sebuah tugas yang berjalan secara mandiri dikenal sebagai goroutine.

1. Prinsip Non-Determinisme

Sebaiknya selalu berasumsi bahwa operasi dalam goroutine yang berbeda dapat berjalan dalam urutan apa saja. Karena runtime Go menjadwalkan tugas di inti yang tersedia, kita tidak dapat mengandalkan satu rover menyelesaikan pemindaian sebelum rover lain memulai pengiriman tanpa sinkronisasi eksplisit.

go printGopher(c) // Memulai tugas mandiri baru

2. Mekanisme Sinkronisasi

Untuk mengelola tugas-tugas ini, Go menyediakan dua alat utama:

  • Eksklusi Bersama: Goroutine dapat menggunakan mutex untuk mencegah satu sama lain melakukan sesuatu pada saat bersamaan.
  • Pernyataan Select: Ini terlihat seperti pernyataan switch di mana setiap kasus menyimpan penerimaan atau pengiriman saluran. select menunggu hingga satu kasus siap, lalu menjalankannya.
Manajer Gopher(Topi Kerja & Kertas Catatan)SELECTRover AlphaRover Beta

3. Kerangka Pekerja

Pekerja jangka panjang biasanya menggunakan loop tak hingga yang dikombinasikan dengan select untuk memantau beberapa saluran komunikasi secara bersamaan:

func worker() {
for {
select {
// Tunggu saluran di sini.
}
}
}
main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>